pwnable.kr-flag

pwnable.kr-flag

这是一道逆向题目,所用知识点:upx加壳脱壳。

题目描述

1
2
3
4
5
Papa brought me a packed present! let's open it.

Download : http://pwnable.kr/bin/flag

This is reversing task. all you need is binary

题目分析

  1. 根据题目提示,先用objdump命令反汇编以下文件,发现不行,错误提示:
1
flag:     file format elf64-x86-64

文件是64位的elf文件

  1. 用IDA打开,查看其二进制文件,根据题目提示,这是一个包,是不是被包装了?
    在二进制文件中发现了upx关键字!
1
2
3
4
seg000:00000000000000B4                 db  55h ; U
seg000:00000000000000B5 db 50h ; P
seg000:00000000000000B6 db 58h ; X
seg000:00000000000000B7 db 21h ; !

或者用checksec命令,检查保护机制:

1
2
3
4
5
6
7
8
9
hdd@ubuntu:~/Desktop/flag$ checksec flag
[*] '/home/hdd/Desktop/flag/flag'
Arch: amd64-64-little
RELRO: No RELRO
Stack: No canary found
NX: NX disabled
PIE: No PIE (0x400000)
RWX: Has RWX segments
Packer: Packed with UPX

百度百科解释upx:

UPX (the Ultimate Packer for eXecutables)是一款先进的可执行程序文件压缩器,压缩过的可执行文件体积缩小50%-70% ,这样减少了磁盘占用空间、网络上传下载的时间和其它分布以及存储费用。 通过 UPX 压缩过的程序和程序库完全没有功能损失和压缩之前一样可正常地运行,对于支持的大多数格式没有运行时间或内存的不利后果。 UPX 支持许多不同的可执行文件格式 包含 Windows 95/98/ME/NT/2000/XP/CE 程序和动态链接库、DOS 程序、 Linux 可执行文件和核心。

加壳:

对于可执行程序资源压缩,是保护文件的常用手段. 俗称加壳,加壳过的程序可以直接运行,但是不能查看源代码.要经过脱壳才可以查看源代码.
加壳:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。解压原理,是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。当加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。

  1. 脱壳
    在Ubuntu上执行upx -d flag失败,直接在Windows系统上下载upx,进行脱壳,执行后,再重新在IDA中打开flag文件,发现了flag:
    UPX…? sounds like a delivery service :)
文章目录
  1. 1. pwnable.kr-flag
    1. 1.1. 题目描述
    2. 1.2. 题目分析